package com.atguigu.boot.controller;

import com.atguigu.boot.bean.Person;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.Cookie;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author ：malichun
 * @date 2022/1/20 11:00 PM
 * @description： 通过注解形式获取参数
 * @modified By：
 */
@RestController
public class ParameterTestController {
    @PostMapping("/saveuser")
    public Person saveUser(Person person){
        return person;
    }

    // // 1.路径变量
    // // car/2/owner/zhangsan
    // @RequestMapping(path="/car/{id}/owner/{username}" , method = RequestMethod.GET)
    // public Map<String,Object> getCar(@PathVariable("id")Integer id,
    //                                  @PathVariable("username") String name,
    //                                  @PathVariable Map<String,String> pv,
    //                                  @RequestHeader("user-Agent")String userAgent){ // map表示获取所有的变量
    //     Map<String,Object> map = new HashMap<>();
    //     map.put("id",id);
    //     map.put("name",name);
    //     map.put("pv",pv);
    //     map.put("userAgent",userAgent);
    //     return map;
    // }


    // // 2.请求头
    // // car/2/owner/zhangsan
    // @GetMapping("/car/{id}/owner/{username}")
    // @RequestMapping(path="/car/{id}/owner/{username}" , method = RequestMethod.GET)
    // public Map<String,Object> getCar(@RequestHeader("user-Agent")String userAgent,@RequestHeader Map<String,String> headerMap){ // map表示获取所有的变量
    //     Map<String,Object> map = new HashMap<>();
    //
    //     map.put("userAgent",userAgent);
    //     map.put("headerMap",headerMap);
    //     return map;
    // }

    // // 3.请求参数
    // // car/2/owner/zhangsan
    // @GetMapping("/car/{id}/owner/{username}")
    // // @RequestMapping(path="/car/{id}/owner/{username}" , method = RequestMethod.GET)
    // public Map<String,Object> getCar(@RequestParam("age")Integer age,
    //                                  @RequestParam("inters") List<String> inters,
    //                                  @RequestParam Map<String,String> requestParams){ // map表示获取所有的变量
    //     Map<String,Object> map = new HashMap<>();
    //     map.put("age",age);
    //     map.put("inters",inters);
    //     map.put("params",requestParams);
    //     return map;
    // }

    // // 4 @CookieValue
    // @GetMapping("/car/{id}/owner/{username}")
    // public Map<String,Object> getCar(@CookieValue("_ga") String ga,
    //                                  @CookieValue Cookie cookie){
    //     Map<String,Object> map = new HashMap<>();
    //     map.put("_ga",ga);
    //     map.put("cookie",cookie);
    //     return map;
    // }

    // 5.@RequestBody 表单提交
    @PostMapping("/save")
    public Map<String,Object> postMethod (@RequestBody String content){
        Map<String,Object> map = new HashMap<>();
        map.put("content",content);
        return map;
    }

    // 1.语法 /cars/sell;low=34;brand=byd,audi,yd
    // 2.SpringBoot默认是禁用了矩阵变量的的功能
    //  手动开启: 原理:对应路径的处理,都是使用UrlPathHelper进行解析
    //  removeSemicolonContent(移除分号后的内容)
    //3. 矩阵变量必须有url路径变量才能被解析
    @GetMapping("/cars/{path}") // 会传输很多矩阵变量
    public Map<String,Object> carsSell(@MatrixVariable("low") Integer low,
                                       @MatrixVariable("brand") List<String> brand,
                                       @PathVariable("path") String path){
        Map<String,Object> map = new HashMap<>();
        map.put("low",low);
        map.put("brand",brand);
        map.put("path",path);
        return map;
    }

    // /boss/1;age=20/2;age=10
    @GetMapping("boss/{bossId}/{empId}")
    public Map<String,Object> boss(@MatrixVariable(pathVar= "bossId",value = "age") Integer bossAge,
                                   @MatrixVariable(pathVar = "empId",value = "age") Integer empAge){
        Map<String,Object> map = new HashMap<>();
        map.put("bossAge",bossAge);
        map.put("empAge", empAge);
        return map;
    }
        
}
